Flink DataStream API ব্যবহার করে স্ট্রিম প্রসেসিং করতে পারেন। এটি সাধারণত real-time data প্রসেসিংয়ের জন্য ব্যবহৃত হয়। নিচে একটি উদাহরণ দিয়ে দেখানো হয়েছে যেখানে একটি DataStream থেকে ডেটা পড়ে এবং কিছু প্রসেসিং করে আউটপুট দেওয়া হয়েছে।
এই উদাহরণে, আমরা একটি socket থেকে ডেটা পড়ব এবং প্রতি লাইনের প্রতিটি word এর সংখ্যা গণনা করব।
প্রথমে আপনাকে Maven প্রোজেক্টে Flink এর ডিপেন্ডেন্সি যুক্ত করতে হবে। নিচের কোডটি আপনার pom.xml
ফাইলে যুক্ত করুন:
<dependencies>
<!-- Flink Core Dependency -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>1.15.0</version> <!-- Flink এর ভার্সন -->
</dependency>
</dependencies>
নিচের উদাহরণে, আমরা Flink এর মাধ্যমে একটি socket থেকে ডেটা পড়ব এবং word count করব। এটি একটি সাধারণ স্ট্রিম প্রসেসিং উদাহরণ।
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;
public class FlinkWordCount {
public static void main(String[] args) throws Exception {
// Execution Environment তৈরি করুন
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// DataStream তৈরি করে socket থেকে ডেটা পড়ুন (hostname: localhost, port: 9999)
DataStream<String> text = env.socketTextStream("localhost", 9999);
// প্রতিটি লাইনের word গুলোকে আলাদা করে গণনা করুন
DataStream<Tuple2<String, Integer>> wordCounts = text
.flatMap(new Tokenizer())
.keyBy(value -> value.f0)
.sum(1);
// আউটপুট প্রিন্ট করুন
wordCounts.print();
// Execution শুরু করুন
env.execute("Socket WordCount Example");
}
// Tokenizer class - word গুলোকে আলাদা করে এবং তাদের একটি count সহ output দেয়
public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
@Override
public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
// প্রতিটি লাইনের word গুলো স্পেস দিয়ে আলাদা করুন
String[] tokens = value.toLowerCase().split("\\W+");
// প্রতিটি word কে (word, 1) টুপল হিসেবে প্রেরণ করুন
for (String token : tokens) {
if (token.length() > 0) {
out.collect(new Tuple2<>(token, 1));
}
}
}
}
}
nc -lk 9999
কমান্ডটি রান করুন (যাতে আপনার socket input পাওয়া যায়)।StreamExecutionEnvironment
Flink এর স্ট্রিম প্রসেসিংয়ের execution environment তৈরি করে।DataStream
হিসেবে save করা হয়।flatMap
function ব্যবহার করে প্রতিটি লাইনের word গুলো আলাদা করে এবং তাদের একটি টুপল (word, 1)
আকারে return করে।এই উদাহরণটি আপনাকে Flink DataStream এর একটি সাধারণ ধারণা দেবে।
আরও দেখুন...